#include <iostream>
#include <string_view>

class A
{
public:
	virtual std::string_view getName1(int x)
	{
		return "A";
	}
	virtual std::string_view getName2(int x)
	{
		return "A";
	}
};

class B : public A
{
public:
	virtual std::string_view getName1(short int x)
	{
		return "B";    // 注意: 参数是 short int
	}
	virtual std::string_view getName2(int x) const
	{
		return "B";    // 注意: 函数是 const
	}
};

int main()
{
	B b{};
	A& rBase{ b };
	std::cout << rBase.getName1(1) << '\n';
	std::cout << rBase.getName2(2) << '\n';

	return 0;
}

/*
派生类虚函数只有在其签名和返回类型完全匹配的情况下才被认为是重写。这可能会导致容易被忽略的问题，即打算被重写的函数实际上并没有被重写。
*/